package com.ysh.xiaomi.service.impl;

import com.ysh.xiaomi.dao.CartDao;
import com.ysh.xiaomi.dao.impl.CartDaoImpl;
import com.ysh.xiaomi.pojo.CartDto;
import com.ysh.xiaomi.pojo.TbCart;
import com.ysh.xiaomi.pojo.TbGoods;
import com.ysh.xiaomi.service.CartService;
import com.ysh.xiaomi.service.GoodsService;

import java.util.ArrayList;
import java.util.List;

/**
 * 袁胜虎 on 2022/8/18 17:09
 */
public class CartServiceImpl implements CartService {
    CartDao cartDao = new CartDaoImpl();
    GoodsService goodsService = new GoodsServiceImpl();
    @Override
    public void upsert(Long goodId, Long userId) {
        //首先得先用这两个id查询一下数据存在与否
        TbCart tbCart = cartDao.findByUserIdAndGoodId(userId,goodId);
        //不存在就是插入一条新的数据
        if (tbCart == null){
            cartDao.addCart(userId,goodId,1);
        }else {
            //如果存在就是更新数量
            cartDao.updateCount(userId,goodId,1);
        }
    }

    @Override
    public CartDto findCartGoodsByUserId(Long userId) {
        //先根据用户的id查询购物车中的所有的商品的id
        List<TbCart> carts = cartDao.findByUserId(userId);
        //保存有每一个商品数量的数组
        long[] nums = new long[carts.size()];
        List ids = new ArrayList();
        for (int i = 0; i <carts.size() ; i++) {
            //保存查询条件
            ids.add(carts.get(i).getNum());
            //将数量保存到数组中
            nums[i]=carts.get(i).getNum();
        }
        //获取到所有的商品的id,然后作为查询条件查询商品
        // List<Long> ids = carts.stream().map(TbCart::getId).collect(Collectors.toList());
        //List<TbGoods> goodsList = goodsService.findByIds(carts.stream().map(TbCart::getPid).collect(Collectors.toList()));
        List<TbGoods> goodsList = goodsService.findByIds(ids);
        //返回给前端的封装的数据对象
        CartDto cartDto = new CartDto();
        cartDto.setGoodsList(goodsList);
        //设置数量的数组
        cartDto.setNums(nums);
        //返回了封装有商品和对应数量的一个对象
        return cartDto;
    }

    @Override
    public void deleteBycart(Long userId) {
        cartDao.deleteBycart(userId);
    }

    @Override
    public void clearCart(Long userId) {
        cartDao.clearCart(userId);
    }
}
